class MejorAjuste:
    #INICIALIZACION
    
    ###constructor
    def __init__(self):
        self.asignador =None
        
###############################################################################################################

    #METODOS    
    def menorBloque (self):
        newList = []
        menorBloque = self.asignador.getLibres().pop(0)
        for bloque in self.asignador.getLibres():
            if menorBloque.getCapacidad() > bloque.getCapacidad():
                newList.append(menorBloque)
                menorBloque = bloque
            else:
                newList.append(bloque)
        self.asignador.setLibres (newList)
        return menorBloque
    
    def asignarMemoria(self, program):
        mejorBloque = self.menorBloque()
        encontreElMejorBloque = False
        newList= []
        newList.append (mejorBloque)
        while ((not encontreElMejorBloque) and (len(self.asignador.getLibres())!=0)):
            if (mejorBloque.getCapacidad() < program.lenCodigo()):
                newList.append(mejorBloque)
                mejorBloque = self.menorBloque()
            else: 
                encontreElMejorBloque = True
        self.asignador.Libres += newList #concateno dos listas
        return mejorBloque
###############################################################################################################

    #GET&SET                      
    def setAsignador (self, asignador):
        self.asignador= asignador